실행중인 응용 프로그램이 Windows Forms 또는 콘솔 응용 프로그램인지 어떻게 확인할 수 있습니까?실행중인 응용 프로그램의 유형 결정 (.NET)
답변
P/호출 :
[DllImport("shell32.dll")]
private static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags);
구조체 :
[StructLayout(LayoutKind.Sequential)]
private struct SHFILEINFO
{
public IntPtr hIcon;
public IntPtr iIcon;
public uint dwAttributes;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=260)]
public string szDisplayName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=80)]
public string szTypeName;
}
방법 :
private static bool IsWindowsApplication(string fileName)
{
SHFILEINFO psfi = new SHFILEINFO();
switch (((int) SHGetFileInfo(fileName, 0, ref psfi, (uint) Marshal.SizeOf(psfi), 0x2000)))
{
case 0:
return false;
case 0x4550:
return false;
case 0x5a4d:
return false;
}
return true;
}
위의 메소드가 false를 돌려주는 경우,이 콘솔 응용 프로그램입니다.
- 오진
프로그래밍 방식으로 수행 할 필요가없는 경우 ProcessExplorer 같은 프로그램을 사용하여 System.Winforms.dll이로드되었는지 확인할 수 있습니다. 나는 이것이 완벽하다고 생각하지 않지만 시작일 수 있습니다.
System.Windows.Forms.Application.OpenForms
에 요소가 포함되어 있는지 확인하는 옵션이 있습니다.
또 다른 옵션은 Console.Title
또는 Console.WindowTop
이 예외를 throw하는지 (콘솔 창이 열려 있지 않은 경우) 확인하는 것입니다.
편집
그러나 응용 프로그램이 콘솔 창 및 형태로 동시에 열 ... 그 다음 응용 프로그램의 어떤 종류가있을 수 있습니다?
신뢰할 수없는 방법입니다. 예를 들어 Windows Forms 응용 프로그램 프로젝트 템플릿에서 새 프로젝트를 시작합니다. 프로젝트 + 속성, 출력 유형을 "콘솔 응용 프로그램"으로 변경하십시오. F5 키를 눌러 모양을 확인합니다. 모든 합리적인 테스트가 콘솔 모드 응용 프로그램이라고 말하지만, 이는 대단히 WF 응용 프로그램입니다.
반대의 경우도 마찬가지입니다. System.Windows.Forms.dll이 있으면 WF 앱이되지 않습니다. 콘솔 응용 프로그램은이를 사용하여 예를 들어 MessageBox를 표시 할 수 있습니다.
더욱 그렇습니다. 코드는 서비스에 의해 호출 될 수 있습니다.
이 문제를 근절하면 앱 작성자는 코드에서 수행해야 할 문제를 알리지 않습니다. 클래스에 속성을 추가하면 클래스에 속성을 추가 할 수 있습니다.
+1 이것은 다른 upvoted 대답보다 훨씬 정확합니다. –
- 1. .net 웹 응용 프로그램의 로그온 유형
- 2. .NET 응용 프로그램의 TransactionScope
- 3. 필요한 실행중인 .NET 응용 프로그램의 GUI 컨트롤을 탐색하는 도구
- 4. 실행중인 응용 프로그램의 응용 프로그램 배지 얻기
- 5. 모니터 실행중인 .net 응용 프로그램
- 6. .NET 응용 프로그램의 타이머
- 7. Linux에서 실행중인 프로그램의 디렉토리?
- 8. iPhone 응용 프로그램의 첫 번째 사용 결정
- 9. 응용 프로그램의 창/화면 크기 결정
- 10. .NET GUI 응용 프로그램의 Console.Write
- 11. 다른 프로그램의 작업 디렉토리 결정
- 12. 실행중인 응용 프로그램의 이름을 가져올 수 없음
- 13. IPhone에서 현재 실행중인 응용 프로그램의 스크린 샷
- 14. 하드웨어에서 실행중인 웹 응용 프로그램의 용어
- 15. 응용 프로그램 결과가 다른 실행중인 응용 프로그램의 영향을받습니다
- 16. 제네릭을 사용하여 유형 결정
- 17. C# 개체 유형 결정
- 18. Qt의 오브젝트 유형 결정
- 19. 컨트롤러 유형 결정 - MonoTouch
- 20. 스마트 포인터에서 유형 결정
- 21. C# 제네릭 유형 결정
- 22. HSSFCell - 숫자 유형 결정
- 23. 파일의 MIME 유형 결정
- 24. .NET 응용 프로그램의 메모리 누수 테스트
- 25. .net 응용 프로그램의 SMTP 메일
- 26. POST .NET 응용 프로그램의 양식
- 27. .NET 응용 프로그램의 SAML 인증
- 28. 신용/직불 카드 유형 결정
- 29. GDB + Python : 대상 유형 결정
- 30. SQLite에서 열의 데이터 유형 결정
양식과 콘솔이 동시에 열리는 경우 어떻게해야합니까? 함수는 무엇을 반환할까요? 그리고 그것은 의미 론적으로 사실일까요? –
@Aviad : Windows에서이 작업을 수행 할 수있는 명확한 방법은 없습니다. 실행 파일은 사용 가능한 하위 시스템 중 하나에 대해서만 컴파일 될 수 있습니다. 서브 시스템의 Windows 문자 (콘솔 응용 프로그램) 또는 Windows GUI 서브 시스템 (또는 원시, OS/2 또는 Posix). 물론 창 응용 프로그램에 콘솔을 연결할 수는 있지만 응용 프로그램은 여전히 창 응용 프로그램으로 남아 있습니다. –
네이티브 실행 파일에는 해당되지만 .NET 실행 파일에는 해당되지 않을 수 있습니다. –