2013-01-15 72 views
0

我正在嘗試編寫一個處理文件自動上傳的C#代碼。 我需要實現的後續是從打開文件對話框中選擇一個文件:設置Windows對話框輸入

我設法找到使用users32.dllFindWindow()方法的窗口。 但我不知道如何設置輸入,如果對話框和批准所選文件(選擇文件&按確定)。

到目前爲止我的代碼:

[DllImport("user32.dll")] 
public static extern int FindWindow(string lpClassName, string lpWindowName); 

public const int WM_SYSCOMMAND = 0x0112; 
public const int SC_CLOSE = 0xF060; 
public const int WM_SETTEXT = 0x000C; 

private void ChooseFile() 
{ 
    // retrieve the handler of the window 
    int iHandle = FindWindow("#32770", "File Upload"); 
    if (iHandle > 0) 
    { 
     //Choose File 
     //Press OK 
    } 
} 

任何幫助將非常感激。

+0

只是爲了澄清我的問題,我並不需要打開一個新的對話框,只是爲了控制由另一個進程打開一個對話框(火狐文件上傳對話框)。 –

回答

1

你有C#類OpenFileDialog(http://www.dotnetperls.com/openfiledialog),不需要user32.dll。

1

你想要做的事情有點奇怪。您調用Win32函數,但所有你需要的是用OpenFileDialog類,這是正確的在這裏.NET方式(MSDN OpenFileDialog

OpenFileDialog dlg = new OpenFileDialog(); 
DialogResult res = dlg.ShowDialog(); 
if (res == DialogResult.OK) 
{ 
    string filePath = dlg.FileName; 
    // do your upload logic here 
} 
+0

嗨Jan。我想控制由另一個進程打開的窗口,並且不打開新的對話窗口,我可以使用OpenFileDialog類與對話窗口交互嗎? –

0

的研究配發後,我找到了解決辦法。

我使用了Windodows.Form.SendKeys類來模擬鍵盤並將字符串發送到聚焦窗口。

這裏是代碼:

SendKeys.SendWait(fileInfo.FullName); 
Thread.Sleep(2000); 
SendKeys.SendWait("{ENTER}"); 
Thread.Sleep(5000);