说明:此程序是为了隐藏任务栏而开发的。此程序是在Windows Mobile 6 Professional SDK下开发的控制台程序。运行此程序,就会创建一个新的进程来运行驱动调试工具,此时任务栏开始隐藏,直到关闭驱动调试工具,任务栏自动恢复。
获取一个已装载模板的完整路径名称
Long,如执行成功,返回复制到lpFileName的实际字符数量;零表示失败。会设置GetLastError
DWORDGetModuleFileName(
HMODULE hModule,
LPTSTR lpFilename,
DWORD nSize
);
hModule HMODULE 装载一个程序实例的句柄。如果该参数为NULL,该函数返回该当前应用程序全路径。
lpFileName LPTSTR 是你存放返回的名字的内存块的指针,是一个输出参数
nSizeDWORD ,装载到缓冲区lpFileName的最大值
include Windows.h
找到相应窗口的句柄
如果函数执行成功,则返回值是拥有指定窗口类名或窗口名的窗口的句柄。
如果函数执行失败,则返回值为 NULL 。可以通过调用GetLastError函数获得更加详细的错误信息。
HWND FindWindow
(
LPCSTR lpClassName,
LPCSTR lpWindowName
);
lpClassName
指向一个以null结尾的、用来指定类名的字符串或一个可以确定类名字符串的原子。如果这个参数是一个原子,那么它必须是一个在调用此函数前已经通过GlobalAddAtom函数创建好的全局原子。这个原子(一个16bit的值),必须被放置在lpClassName的低位字节中,lpClassName的高位字节置零。
如果该参数为null时,将会寻找任何与lpWindowName参数匹配的窗口。
lpWindowName
指向一个以null结尾的、用来指定窗口名(即窗口标题)的字符串。如果此参数为NULL,则匹配所有窗口名。
winuser.h
EnableWindow
该函数允许/禁止指定的窗口或控件接受鼠标和键盘的输入,当输入被禁止时,窗口不响应鼠标和按键的输入,输入允许时,窗口接受所有的输入。
如果窗口原来是被禁止的,返回值不为零;如果窗口原来不是被禁止的,返回值为零。若想获得更多的错误信息,可调用GetLastError函数。
BOOLEnableWindow(HWND hWnd,BOOL bEnable);
hWnd:被允许/禁止的窗口句柄。
bEnable:定义窗口是被允许,还是被禁止。若该参数为TRUE,则窗口被允许。若该参数为FALSE,则窗口被禁止。
该函数设置指定窗口的显示状态。
如果窗口当前可见,则返回值为非零。如果窗口当前被隐藏,则返回值为零。
BOOLShowWindow(HWNDhWnd, int nCmdShow);
hWnd:指窗口句柄。
nCmdShow:指定窗口如何显示。如果发送应用程序的程序提供了STARTUPINFO结构,则应用程序第一次调用ShowWindow时该参数被忽略。否则,在第一次调用ShowWindow函数时,该值应为在函数WinMain中nCmdShow参数。在随后的调用中,该参数可以为下列值之一:
SW_FORCEMINIMIZE:在WindowNT5.0中最小化窗口,即使拥有窗口的线程被挂起也会最小化。在从其他线程最小化窗口时才使用这个参数。
SW_HIDE:隐藏窗口并激活其他窗口。
SW_MAXIMIZE:最大化指定的窗口。
SW_MINIMIZE:最小化指定的窗口并且激活在Z序中的下一个顶层窗口。
创建一个进程
如果函数执行成功,返回非零值。
如果函数执行失败,返回零,可以使用GetLastError函数获得错误的附加信息。
BOOL CreateProcess
(
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes。
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);
lpApplicationName:
指向一个NULL结尾的、用来指定可执行模块的字符串。
这个字符串可以是可执行模块的绝对路径,也可以是相对路径,在后一种情况下,函数使用当前驱动器和目录建立可执行模块的路径。
这个参数可以被设为NULL,在这种情况下,可执行模块的名字必须处于 lpCommandLine 参数的最前面并由空格符与后面的字符分开。
lpCommandLine:
指向一个NULL结尾的、用来指定要运行的命令行。
这个参数可以为空,那么函数将使用参数指定的字符串当作要运行的程序的命令行。
lpProcessInformation:
指向一个用来接收新进程的识别信息的PROCESS_INFORMATION结构体。
其他参数为默认值,ce不支持。
DWORDWaitForSingleObject(
HANDLE hHandle,
DWORD dwMilliseconds
);
hHandle [in]对象句柄。可以指定一系列的对象,如Event、Job、Memory resource notification、Mutex、Process、Semaphore、Thread、Waitable timer等。
当等待仍在挂起状态时,句柄被关闭,那么函数行为是未定义的。该句柄必须具有 SYNCHRONIZE 访问权限。
dwMilliseconds [in]定时时间间隔,单位为milliseconds(毫秒).如果指定一个非零值,函数处于等待状态直到hHandle 标记的对象被触发,或者时间到了。如果dwMilliseconds 为0,对象没有被触发信号,函数不会进入一个等待状态,它总是立即返回。如果dwMilliseconds 为INFINITE,对象被触发信号后,函数才会返回。
执行成功,返回值指示出引发函数返回的事件
#include<windows.h>
#include<winuser.h>
int_tmain(intargc, _TCHAR* argv[])
{
HWNDhWnd;
DWORDdwLen;
PROCESS_INFORMATIONpi;
TCHARszPath[MAX_PATH];
dwLen= GetModuleFileName(NULL, szPath, MAX_PATH);//获取当前模块目录
if (!dwLen)
{
return 0;
}
while (szPath[--dwLen] != _T('\\'))
{
szPath[dwLen] = _T('\0');
}
wcscat(szPath, _T("DM.exe"));//调试工具的可执行文件
hWnd= FindWindow(_T("HHTaskBar"), NULL);//找到任务栏句柄
if (hWnd)
{
EnableWindow(hWnd, FALSE);//隐藏任务栏
ShowWindow(hWnd, SW_HIDE);
}
if(CreateProcess(szPath,NULL, NULL,0, FALSE, 0, NULL,NULL, NULL,&pi))
{
WaitForSingleObject(pi.hProcess, INFINITE);//无线等待,直到调试工具关闭
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
}
EnableWindow(hWnd, TRUE);//显示任务栏
ShowWindow(hWnd, SW_SHOW);
return 0;
}