Bana açıklar mısınız, API işlevleri AllocConsole
ve AttachConsole(-1)
arasındaki fark nedir? Yani AttachConsole
ATTACH_PARENT_PROCESS(DWORD)-1
alırsa.API işlevleri AllocConsole ve AttachConsole (-1) arasındaki fark nedir?
cevap
Eh, temel farktır:
AllocConsole()
yeni bir konsolu (ve ona bağlanması) olacakAttachConsole(ATTACH_PARENT_PROCESS /* -1 */)
yeni konsolu oluşturmaz, bu ebeveynin mevcut konsoluna eklemek olacaktır süreci.
İlk durumda yeni bir konsol penceresi alırsınız, ikinci durumda, var olan bir konsol penceresini kullanırsınız.
Elbette, eğer zaten bir konsola bağlıysanız (yani., Cmd.exe'den başlatılan bir konsol modu programısınız) pek bir fark yoktur - API ile bir hata alırsınız.
Ayrıca, bir konsoldan ayrılmanızın bağımsız konsolun yararlı olacağı anlamına gelmediğini unutmayın - örneğin, bir cmd penceresinden başlatılan bir konsol işlemiyse, bu pencere işleminiz bitene kadar engellenir.
ile oynamak için bazı kod:
int main(int argc, char* argv[])
{
int ch;
BOOL bResult;
printf("default console\n");
ch = getchar();
bResult = FreeConsole();
bResult = AllocConsole();
printf("AllocConsole()\n");
ch = getchar();
bResult = FreeConsole();
bResult = AttachConsole(ATTACH_PARENT_PROCESS);
printf("AttachConsole(ATTACH_PARENT_PROCESS)\n");
ch = getchar();
return 0;
}
Winapi'yi kullandığımdan beri bir süredir var, ancak the MSDN documentation'u aradım ve CreateConsole API işlevini bulamadım. Bu yüzden benim tahminim CreateConsole eski şeyler ve AttachConsole ile değiştirildi. Yani muhtemelen bir fark yoktur, ancak CreateConsole muhtemelen kullanımdan kaldırılmıştır.
CreateConsole
adlı bir işlev olduğunu sanmıyorum, ancak AllocConsole
var.
Bunun ne anlama geldiğini varsayarsak, buradaki farkın, ana işlem konsolunda yoksa AttachConsole(ATTACH_PARENT_PROCESS)
'un return ERROR_INVALID_HANDLE
olabileceğini düşünüyorum.
#include <windows.h>
#pragma comment (lib, "user32.lib")
int main()
{
BOOL b;
char msg[1024];
b = FreeConsole();
sprintf(msg, "%d", b);
MessageBox(NULL, msg, "FreeConsole", 0);
b = AttachConsole(ATTACH_PARENT_PROCESS);
sprintf(msg, "%d", b);
MessageBox(NULL, msg, "AttachConsole", 0);
return 0;
}
, bir 1
içeren iki mesaj kutusu görüntülenir, her iki çağrılar başarılı anlam. Başlat -> Çalıştır çalıştırıldığında, ilk kutu 1
içerir ve ikincisi 0
içerir, bu da yalnızca ilk aramanın başarılı olduğu anlamına gelir. İkincisi başarısız olur; çünkü explorer.exe (Başlat -> Çalıştır) tarafından başlatılan bir işlemin üst öğesi olan konsolda bulunmaz.
- 1. Python'da (1,) ve (1) arasındaki fark nedir?
- 2. VarIsEmpty ve VarIsEmptyParam işlevleri arasındaki fark nedir
- 3. Lua C API: lua_gettop() ve -1 arasındaki fark nedir?
- 4. Win32 API'sında `A` ve` W` işlevleri arasındaki fark nedir?
- 5. TimerTask ve Executors.newScheduledThreadPool arasındaki fark (1)
- 6. MSP ve Fabric CA arasındaki fark nedir?
- 7. EXC_BAD_ACCESS'de kod = 1 ve kod = 2 arasındaki fark nedir?
- 8. Python'da {} ve [] arasındaki fark nedir?
- 9. UNIX'teki $ @ ve $ * arasındaki fark nedir?
- 10. $ arasındaki fark nedir? ve PowerShell
- 11. dplyr: group_by ile group_by_ işlevleri arasındaki fark nedir?
- 12. ActivityCompat ve ContextCompat arasındaki fark nedir?
- 13. Fark() arasındaki fark nedir mustache.js
- 14. scipy.ndimage.filters.convolve ve scipy.signal.convolve arasındaki fark nedir?
- 15. Decimal.Round ve Math.Round arasındaki fark
- 16. Calendar.HOUR ve Calendar.HOUR_OF_DAY arasındaki fark nedir?
- 17. BigQuery ve BigTable arasındaki fark nedir?
- 18. AllocConsole
- 19. Geri izleme ve özyineleme arasındaki fark nedir?
- 20. arasındaki fark
- 21. [[]] ve $ liste endeksleme arasındaki fark nedir?
- 22. Subtotal ve BaseSubtotal arasındaki fark nedir?
- 23. arasındaki fark nedir?
- 24. Java arasındaki fark nedir
- 25. Groovy her ve forEach arasındaki fark nedir?
- 26. matplotlib.pyplot ve matplotlib.figure arasındaki fark nedir?
- 27. arasındaki fark nedir?
- 28. getmypid() ve posix_getpid() arasındaki fark
- 29. Ondalık ve ondalık arasındaki fark
- 30. FUTEX_WAIT ve FUTEX_WAIT_PRIVATE arasındaki fark nedir?
bu Windows Programı (ve bir konsol Programı) olarak derlenmiş bir yürütülebilir dosya için konsol pencere oluşturmak için C# .NET kullanılabilir mi? – configurator
Evet yapabilir. Ancak bir konsol elde etmek çok daha kolaydır, sadece projenin Çıkış Tipini Konsol Uygulamasına değiştirin. –
@configuratoir - bunu yapabileceğinizi bildiğim kadarıyla ama Win32 API'lerini çağırmak için p/invoke kullanmanız gerekeceğini düşünüyorum (bu API'lar için büyük bir anlaşma değil) - Çerçeve eşdeğeri olup olmadığından emin değilim . –