基于visual c++之windows核心编程代码分析(48)编程实现远程登录3389

 3389端口是Windows 2000(2003) Server 远程桌面的服务端口,可以通过这个端口,用"远程桌面"等连接工具来连接到远程的服务器,如果连接上了,输入系统管理员的用户名和密码后,将变得可以像操作本机一样操作远程的电脑,因此远程服务器一般都将这个端口修改数值或者关闭。
3389端口的关闭:   

首先说明3389端口是windows的远程管理终端所开的端口,它并不是一个木马程序,请先确定该服务是否是你自己开放的。

如果不是必须的,建议关闭该服务。   

win2000 server 开始-->程序-->管理工具-->服务里找到Terminal Services服务项,选中属性选项将启动类型改成手动,并停止该服务。

  win2000 pro 开始-->设置-->控制面板-->管理工具-->服务里找到Terminal Services服务项,选中属性选项将启动类型改成手动,并停止该服务。

  windows xp关闭的方法:在我的电脑上点右键选属性-->远程,将里面的远程协助和远程桌面两个选项框里的勾去掉

 

我们下面编程实现3389远程登录远程桌面。

 

#include <windows.h>
//#include <winuser.h>
int _stdcall WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
	HWND MessageBoxHandle,MessageBoxHandle1;
	POINT pt;
	char* MstscCommandLine = "mstsc.exe c:\\Default.rdp \/w 1024 \/h 768";
	WinExec(MstscCommandLine,SW_SHOW);  //连接3389

	
	for (int i = 0; i<20;i++)
		{
		//查找窗口句柄
		MessageBoxHandle1 = FindWindow("TSSHELLWND",NULL);
		MessageBoxHandle = FindWindowEx(MessageBoxHandle1,0,"TSCAXHOST",NULL);
		MessageBoxHandle = FindWindowEx(MessageBoxHandle,0,"ATL:6A688220",NULL);
		MessageBoxHandle = FindWindowEx(MessageBoxHandle,0,"UIMainClass",NULL);
	    MessageBoxHandle = FindWindowEx(MessageBoxHandle,0,"UIContainerClass",NULL);
		MessageBoxHandle = FindWindowEx(MessageBoxHandle,0,"OPWindowClass",NULL);
		//MessageBoxHandle = FindWindowEx(0,0,0,"Default - 192.168.123.117 - 远程桌面");
		if (MessageBoxHandle)
		{
			Sleep(2000);
			//以下发送消息的代码未能测试成功,注释了
		    /*LRESULT returnvalue = SendMessage(MessageBoxHandle,WM_KEYDOWN,VK_F1,1L);
		    SendMessage(MessageBoxHandle,WM_CHAR,'I',0);
		    Sleep(1000);
		    SendMessage(MessageBoxHandle,WM_CHAR,'I',1);
		    SendMessage(MessageBoxHandle,WM_CHAR,13,NULL);
		    SendMessage(MessageBoxHandle,WM_KEYDOWN,VK_CONTROL,1);*/
		
			SetForegroundWindow(MessageBoxHandle1);
		    SendMessage(MessageBoxHandle1,WM_SYSCOMMAND,SC_MAXIMIZE,0);
		    Sleep(1000);
			mouse_event(MOUSEEVENTF_LEFTDOWN|MOUSEEVENTF_LEFTUP,0,0,0,0);
		    Sleep(1000);
		    mouse_event(MOUSEEVENTF_RIGHTDOWN|MOUSEEVENTF_RIGHTUP,0,0,0,0);
		    Sleep(1000);
		    GetCursorPos(&pt);
		    SetCursorPos(pt.x + 20,pt.y+95);
		    mouse_event(MOUSEEVENTF_LEFTDOWN|MOUSEEVENTF_LEFTUP,0,0,0,0);
		    Sleep(1000);
		    GetCursorPos(&pt);
		    SetCursorPos(pt.x + 164,pt.y);
		    mouse_event(MOUSEEVENTF_LEFTDOWN|MOUSEEVENTF_LEFTUP,0,0,0,0);
			   break;
	}
	Sleep(100);
	}
	return 0;
}


 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
很高兴能够回答你的问题。首先,让我们来了解一下Windows服务是什么。 Windows服务是在Windows操作系统中以后台方式运行的应用程序。服务的主要作用是在系统启动时自动启动,并在后台持续运行以提供某种特定的功能或服务。Windows服务可以通过Windows服务管理器进行管理和控制。 接下来,我们来看一下如何实现一个Windows服务并进行安装和控制。 1. 创建Windows服务项目 首先,我们需要使用Visual Studio创建一个Windows服务项目。在Visual Studio中选择“新建项目”->“Visual C++”->“Windows Desktop”->“Windows服务”,然后命名项目并选择保存路径即可。 2. 编写服务代码 在服务项目中,我们需要编写服务代码。这些代码包括服务的启动、停止、暂停、恢复等功能。下面是一个示例代码: ``` #include "stdafx.h" #include "MyService.h" #include <iostream> using namespace std; #define SERVICE_NAME "MyService" SERVICE_STATUS ServiceStatus; SERVICE_STATUS_HANDLE hServiceStatusHandle; void WINAPI ServiceMain(DWORD argc, LPTSTR *argv); void WINAPI ServiceCtrlHandler(DWORD); int _tmain(int argc, _TCHAR* argv[]) { SERVICE_TABLE_ENTRY ServiceTable[] = { {SERVICE_NAME, (LPSERVICE_MAIN_FUNCTION)ServiceMain}, {NULL, NULL} }; if (StartServiceCtrlDispatcher(ServiceTable) == FALSE) { cout << "StartServiceCtrlDispatcher failed" << endl; return GetLastError(); } return 0; } void WINAPI ServiceMain(DWORD argc, LPTSTR *argv) { hServiceStatusHandle = RegisterServiceCtrlHandler(SERVICE_NAME, ServiceCtrlHandler); if (hServiceStatusHandle == NULL) { cout << "RegisterServiceCtrlHandler failed" << endl; return; } ServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS; ServiceStatus.dwCurrentState = SERVICE_START_PENDING; ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_PAUSE_CONTINUE; ServiceStatus.dwWin32ExitCode = NO_ERROR; ServiceStatus.dwServiceSpecificExitCode = 0; ServiceStatus.dwCheckPoint = 0; ServiceStatus.dwWaitHint = 0; if (SetServiceStatus(hServiceStatusHandle, &ServiceStatus) == FALSE) { cout << "SetServiceStatus failed" << endl; return; } ServiceStatus.dwCurrentState = SERVICE_RUNNING; if (SetServiceStatus(hServiceStatusHandle, &ServiceStatus) == FALSE) { cout << "SetServiceStatus failed" << endl; return; } while (ServiceStatus.dwCurrentState == SERVICE_RUNNING) { // Do something here } return; } void WINAPI ServiceCtrlHandler(DWORD dwCtrl) { switch (dwCtrl) { case SERVICE_CONTROL_PAUSE: ServiceStatus.dwCurrentState = SERVICE_PAUSE_PENDING; if (SetServiceStatus(hServiceStatusHandle, &ServiceStatus) == FALSE) { cout << "SetServiceStatus failed" << endl; return; } ServiceStatus.dwCurrentState = SERVICE_PAUSED; if (SetServiceStatus(hServiceStatusHandle, &ServiceStatus) == FALSE) { cout << "SetServiceStatus failed" << endl; return; } break; case SERVICE_CONTROL_CONTINUE: ServiceStatus.dwCurrentState = SERVICE_CONTINUE_PENDING; if (SetServiceStatus(hServiceStatusHandle, &ServiceStatus) == FALSE) { cout << "SetServiceStatus failed" << endl; return; } ServiceStatus.dwCurrentState = SERVICE_RUNNING; if (SetServiceStatus(hServiceStatusHandle, &ServiceStatus) == FALSE) { cout << "SetServiceStatus failed" << endl; return; } break; case SERVICE_CONTROL_STOP: ServiceStatus.dwCurrentState = SERVICE_STOP_PENDING; if (SetServiceStatus(hServiceStatusHandle, &ServiceStatus) == FALSE) { cout << "SetServiceStatus failed" << endl; return; } ServiceStatus.dwCurrentState = SERVICE_STOPPED; if (SetServiceStatus(hServiceStatusHandle, &ServiceStatus) == FALSE) { cout << "SetServiceStatus failed" << endl; return; } break; default: break; } } ``` 这是一个简单的示例代码,其中包含了服务的启动、停止、暂停和恢复功能。我们可以将服务的具体功能实现放在while循环中。 3. 安装服务 在编写完服务代码后,我们需要将服务安装到系统中。可以使用命令行工具“sc.exe”来进行安装。打开命令提示符窗口,输入以下命令: ``` sc create MyService binPath= "C:\MyService.exe" ``` 其中,MyService是服务的名称,C:\MyService.exe是服务的可执行文件路径。 4. 启动、停止、暂停和恢复服务 在服务安装成功后,我们可以使用Windows服务管理器来启动、停止、暂停和恢复服务。打开Windows服务管理器,找到MyService服务,右键单击服务并选择相应的选项即可。 除此之外,我们也可以使用命令行工具“sc.exe”来进行控制。以下是一些常用的命令: ``` sc start MyService sc stop MyService sc pause MyService sc continue MyService ``` 这些命令可以在命令提示符窗口中直接执行。 总结 通过以上步骤,我们可以成功地实现一个Windows服务,并进行安装和控制。请注意,在实现服务时,我们需要注意服务的生命周期、状态转换、错误处理等方面。希望这篇文章能够帮助你更好地理解Windows服务的实现和控制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尹成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值