oleview: Added CreateInstanceOn functionality.
This commit is contained in:
parent
566beb788b
commit
b2d91368e5
|
@ -117,3 +117,14 @@ STRINGTABLE
|
||||||
IDS_CGCOFAIL, "CoGetClassObject failed."
|
IDS_CGCOFAIL, "CoGetClassObject failed."
|
||||||
IDS_ERROR_UNKN, "Unknown error"
|
IDS_ERROR_UNKN, "Unknown error"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DLG_CREATEINSTON DIALOG DISCARDABLE 0, 0, 250, 41
|
||||||
|
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU
|
||||||
|
CAPTION "Connect to another machine"
|
||||||
|
FONT 8, "MS Shell Dlg"
|
||||||
|
{
|
||||||
|
LTEXT "&Machine name:", IDIGNORE, 5, 6, 190, 8
|
||||||
|
EDITTEXT IDC_MACHINE, 5, 16, 190, 12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL
|
||||||
|
DEFPUSHBUTTON "&OK", IDOK, 200, 5, 45, 14
|
||||||
|
PUSHBUTTON "&Cancel", IDCANCEL, 200, 22, 45, 14
|
||||||
|
}
|
||||||
|
|
|
@ -51,6 +51,7 @@ typedef struct
|
||||||
HINSTANCE hMainInst;
|
HINSTANCE hMainInst;
|
||||||
BOOL bExpert;
|
BOOL bExpert;
|
||||||
DWORD dwClsCtx;
|
DWORD dwClsCtx;
|
||||||
|
WCHAR wszMachineName[MAX_LOAD_STRING];
|
||||||
}GLOBALS;
|
}GLOBALS;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -115,5 +116,5 @@ void AddTreeEx(void);
|
||||||
void AddTree(void);
|
void AddTree(void);
|
||||||
HWND CreateTreeWindow(HINSTANCE hInst);
|
HWND CreateTreeWindow(HINSTANCE hInst);
|
||||||
BOOL CreateRegPath(HTREEITEM item, WCHAR *buffer, int bufSize);
|
BOOL CreateRegPath(HTREEITEM item, WCHAR *buffer, int bufSize);
|
||||||
void CreateInst(HTREEITEM item);
|
void CreateInst(HTREEITEM item, WCHAR *wszMachineName);
|
||||||
void ReleaseInst(HTREEITEM item);
|
void ReleaseInst(HTREEITEM item);
|
||||||
|
|
|
@ -23,6 +23,32 @@
|
||||||
GLOBALS globals;
|
GLOBALS globals;
|
||||||
static WCHAR wszRegEdit[] = { 'r','e','g','e','d','i','t','.','e','x','e','\0' };
|
static WCHAR wszRegEdit[] = { 'r','e','g','e','d','i','t','.','e','x','e','\0' };
|
||||||
|
|
||||||
|
INT_PTR CALLBACK CreateInstOnProc(HWND hDlgWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
HWND hEdit;
|
||||||
|
|
||||||
|
switch(uMsg)
|
||||||
|
{
|
||||||
|
case WM_COMMAND:
|
||||||
|
switch(LOWORD(wParam)) {
|
||||||
|
case IDOK:
|
||||||
|
memset(globals.wszMachineName, 0, sizeof(WCHAR[MAX_LOAD_STRING]));
|
||||||
|
hEdit = GetDlgItem(hDlgWnd, IDC_MACHINE);
|
||||||
|
|
||||||
|
if (GetWindowTextLength(hEdit)>0)
|
||||||
|
GetWindowText(hEdit, globals.wszMachineName, MAX_LOAD_STRING);
|
||||||
|
|
||||||
|
EndDialog(hDlgWnd, IDOK);
|
||||||
|
return TRUE;
|
||||||
|
case IDCANCEL:
|
||||||
|
EndDialog(hDlgWnd, IDCANCEL);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
void ResizeChild(void)
|
void ResizeChild(void)
|
||||||
{
|
{
|
||||||
RECT client, stat, tool;
|
RECT client, stat, tool;
|
||||||
|
@ -125,7 +151,14 @@ int MenuCommand(WPARAM wParam, HWND hWnd)
|
||||||
break;
|
break;
|
||||||
case IDM_CREATEINST:
|
case IDM_CREATEINST:
|
||||||
hSelect = TreeView_GetSelection(globals.hTree);
|
hSelect = TreeView_GetSelection(globals.hTree);
|
||||||
CreateInst(hSelect);
|
CreateInst(hSelect, NULL);
|
||||||
|
SendMessage(globals.hTree, TVM_EXPAND, TVE_EXPAND, (LPARAM)hSelect);
|
||||||
|
break;
|
||||||
|
case IDM_CREATEINSTON:
|
||||||
|
if(DialogBox(0, MAKEINTRESOURCE(DLG_CREATEINSTON),
|
||||||
|
hWnd, CreateInstOnProc) == IDCANCEL) break;
|
||||||
|
hSelect = TreeView_GetSelection(globals.hTree);
|
||||||
|
CreateInst(hSelect, globals.wszMachineName);
|
||||||
SendMessage(globals.hTree, TVM_EXPAND, TVE_EXPAND, (LPARAM)hSelect);
|
SendMessage(globals.hTree, TVM_EXPAND, TVE_EXPAND, (LPARAM)hSelect);
|
||||||
break;
|
break;
|
||||||
case IDM_RELEASEINST:
|
case IDM_RELEASEINST:
|
||||||
|
|
|
@ -67,3 +67,6 @@
|
||||||
|
|
||||||
#define IDS_CGCOFAIL 300
|
#define IDS_CGCOFAIL 300
|
||||||
#define IDS_ERROR_UNKN 301
|
#define IDS_ERROR_UNKN 301
|
||||||
|
|
||||||
|
#define DLG_CREATEINSTON 1000
|
||||||
|
#define IDC_MACHINE 1001
|
||||||
|
|
|
@ -50,7 +50,7 @@ LPARAM CreateITEM_INFO(INT flag, const WCHAR *info, const WCHAR *clsid)
|
||||||
return (LPARAM)reg;
|
return (LPARAM)reg;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreateInst(HTREEITEM item)
|
void CreateInst(HTREEITEM item, WCHAR *wszMachineName)
|
||||||
{
|
{
|
||||||
TVITEM tvi;
|
TVITEM tvi;
|
||||||
HTREEITEM hCur;
|
HTREEITEM hCur;
|
||||||
|
@ -62,6 +62,8 @@ void CreateInst(HTREEITEM item)
|
||||||
WCHAR wszRegPath[MAX_LOAD_STRING];
|
WCHAR wszRegPath[MAX_LOAD_STRING];
|
||||||
const WCHAR wszFormat[] = { '\n','%','s',' ','(','$','%','x',')','\n','\0' };
|
const WCHAR wszFormat[] = { '\n','%','s',' ','(','$','%','x',')','\n','\0' };
|
||||||
CLSID clsid;
|
CLSID clsid;
|
||||||
|
COSERVERINFO remoteInfo;
|
||||||
|
MULTI_QI qi;
|
||||||
IUnknown *obj, *unk;
|
IUnknown *obj, *unk;
|
||||||
HRESULT hRes;
|
HRESULT hRes;
|
||||||
|
|
||||||
|
@ -86,7 +88,21 @@ void CreateInst(HTREEITEM item)
|
||||||
|
|
||||||
if(FAILED(CLSIDFromString(((ITEM_INFO *)tvi.lParam)->clsid, &clsid))) return;
|
if(FAILED(CLSIDFromString(((ITEM_INFO *)tvi.lParam)->clsid, &clsid))) return;
|
||||||
|
|
||||||
hRes = CoCreateInstance(&clsid, NULL, globals.dwClsCtx,
|
if(wszMachineName)
|
||||||
|
{
|
||||||
|
remoteInfo.dwReserved1 = 0;
|
||||||
|
remoteInfo.dwReserved2 = 0;
|
||||||
|
remoteInfo.pAuthInfo = NULL;
|
||||||
|
remoteInfo.pwszName = wszMachineName;
|
||||||
|
|
||||||
|
qi.pIID = &IID_IUnknown;
|
||||||
|
|
||||||
|
CoCreateInstanceEx(&clsid, NULL, globals.dwClsCtx|CLSCTX_REMOTE_SERVER,
|
||||||
|
&remoteInfo, 1, &qi);
|
||||||
|
hRes = qi.hr;
|
||||||
|
obj = qi.pItf;
|
||||||
|
}
|
||||||
|
else hRes = CoCreateInstance(&clsid, NULL, globals.dwClsCtx,
|
||||||
&IID_IUnknown, (void **)&obj);
|
&IID_IUnknown, (void **)&obj);
|
||||||
|
|
||||||
if(FAILED(hRes))
|
if(FAILED(hRes))
|
||||||
|
@ -637,7 +653,7 @@ LRESULT CALLBACK TreeProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
switch(((LPNMHDR)lParam)->code)
|
switch(((LPNMHDR)lParam)->code)
|
||||||
{
|
{
|
||||||
case TVN_ITEMEXPANDING:
|
case TVN_ITEMEXPANDING:
|
||||||
CreateInst(((NMTREEVIEW *)lParam)->itemNew.hItem);
|
CreateInst(((NMTREEVIEW *)lParam)->itemNew.hItem, NULL);
|
||||||
break;
|
break;
|
||||||
case TVN_SELCHANGED:
|
case TVN_SELCHANGED:
|
||||||
RefreshMenu(((NMTREEVIEW *)lParam)->itemNew.hItem);
|
RefreshMenu(((NMTREEVIEW *)lParam)->itemNew.hItem);
|
||||||
|
|
Loading…
Reference in New Issue