백그라운드에서 실행되는 프로그램이 있습니다. 메시지 상자가 나타나면 예를 클릭하여 지정된 프로그램으로 전환합니다.SetForegroundWindow가 작동하지 않습니다. 클래스/캡션 이름을 확인하는 방법
ClassName과 CaptionName이 작동하는 것을 찾지 못했습니다. 게임 World of Warcraft와 함께 작동해야합니다.
Window Title은 "World of Warcraft Retail"이라는 작업 관리자의 "Wold of Warcraft"입니다. Wow-64 속성의 "Wow-64"속성을 검사하면 제품 이름이 "World of Warcraft Retail"입니다. 워크 래프트 "그래서 나는이 모든 조합을 시도하고 아무것도 작동합니다. 코드를 넣으면 작동합니다.
BringToFront ("Notepad", "Untitled - Notepad");
작동하므로 와우에 적용하려면 무엇이 필요한지 잘 모릅니다.
내 코드는 다음과 같습니다
[DllImport("User32.dll")]
public static extern Int32 SetForegroundWindow(int hWnd);
[DllImport("user32.dll")]
public static extern int FindWindow(string lpClassName, string lpWindowName);
private void BringToFront(string className, string CaptionName)
{
SetForegroundWindow(FindWindow(className, CaptionName));
}
private void Alert()
{
string title = "WoW Queue Alert: Message";
string message = "The Queue is ready to accept!";
MessageBoxButtons buttons = MessageBoxButtons.YesNo;
DialogResult result;
result = MessageBox.Show(new Form() { TopMost = true }, message, title, buttons, MessageBoxIcon.Information);
if (result == System.Windows.Forms.DialogResult.Yes)
{
BringToFront("World of Warcraft Retail", "World of Warcraft");
}
}
정말 와우에 대한 특별한 아무것도 표시되지 않으며, 메모장 예제는 올바른 코드를 작동하는 방법으로 진행이되어야합니다 :
BringToFront("World of Warcraft Retail", "World of Warcraft");
가 전체 화면 인 프로그램에 영향을 미쳐야하고 어쨌든 블리자드가이 기능을 중지시키기 위해 뭔가를 구현 한 것을 볼 수 없습니다.
편집 : 방금 캡션 이름이 창 제목이기 때문에 ClassName을 null로 설정하고 작동합니다. ClassName이 무엇인지 알지 못해서 찾을 수있는 모든 것을 시도했습니다.
'FindWindow'가 반환하는 것은 무엇입니까? – DavidG
winapi 기능을 pinvoke 할 때 오류 검사는 * 선택 사항이 아닙니다. 당신은 친절하지 않습니다.NET 예외를 사용하면 더 이상 문제를 해결할 수 없으므로 직접 제기해야합니다. –