gpt4 book ai didi

c# - 如何在使用带有动词 "runas"的 ShellExecuteEx 运行应用程序时预选管理员? (Windows XP)

转载 作者:太空宇宙 更新时间:2023-11-04 14:27:16 25 4
gpt4 key购买 nike

我有一个应用程序使用带有动词“RunAs”的 WinAPI“ShellExecuteEx”运行另一个应用程序(我的),以便另一个应用程序应以“管理员”凭据开头。

我的操作系统是 Windows XP。 (不要理会其他操作系统,因为我有特定的代码)

这个东西的唯一问题是“当前用户”是预选的。我希望它成为选择了管理员的“关注用户”。

如何做到这一点?

最佳答案

没有记录的设置或类似的东西来更改 runas 对话框中的默认值。如果您愿意使用丑陋的 hack,我有一些旧代码可以做到这一点:

HHOOK g_MSRunAsHook;
...

LRESULT SndDlgItemMsg(HWND hDlg,int id,UINT Msg,WPARAM wp=0,LPARAM lp=0) {return SendMessage(GetDlgItem(hDlg,id),Msg,wp,lp);}
LRESULT CALLBACK MSRunAsDlgModProc(int nCode,WPARAM wp,LPARAM lp)
{
CWPRETSTRUCT*pCWPS;
if (nCode >= 0 && (pCWPS=(CWPRETSTRUCT*)lp) && WM_INITDIALOG==pCWPS->message)
{
TCHAR buf[30];
GetClassName(pCWPS->hwnd,buf,ARRAYSIZE(buf));
if (!lstrcmpi(buf,_T("#32770")))
{
GetClassName(GetDlgItem(pCWPS->hwnd,0x105),buf,ARRAYSIZE(buf));
if (!lstrcmpi(buf,_T("SysCredential"))) //is this the correct dialog?
{
SndDlgItemMsg(pCWPS->hwnd,0x106,BM_SETCHECK,BST_UNCHECKED);//optional
SndDlgItemMsg(pCWPS->hwnd,0x104,BM_CLICK);
SndDlgItemMsg(GetDlgItem(pCWPS->hwnd,0x105),0x3EB,WM_SETTEXT,0,(LPARAM)"Admin name");
SndDlgItemMsg(GetDlgItem(pCWPS->hwnd,0x105),0x3ED,WM_SETTEXT,0,(LPARAM)"Admin pwd");
}
}
}
return CallNextHookEx(g_MSRunAsHook,nCode,wp,lp);
}
...

g_MSRunAsHook=NULL;
if(GetOSVerMajor()==5 && GetOSVerMinor()>=1) //only XP/2003 (you must implement GetOSVer* on your own)
{
g_MSRunAsHook=SetWindowsHookEx(WH_CALLWNDPROCRET,MSRunAsDlgModProc,0,GetCurrentThreadId());
}
ShellExecuteEx(&sei);
if (g_MSRunAsHook)UnhookWindowsHookEx(g_MSRunAsHook);

关于c# - 如何在使用带有动词 "runas"的 ShellExecuteEx 运行应用程序时预选管理员? (Windows XP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2857717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com