Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
1 / 1 / 3
Регистрация: 21.02.2013
Сообщений: 40
1

робота с HWND

21.02.2013, 16:09. Показов 3694. Ответов 28
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
всем привет!
допустим, у меня есть некий дескриптор и мне нужно записать его значение в файл, с помощью fopen, fputs.
но не совпадение форматов не дает это сделать, возможно знает кто решение этой задачи?+
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.02.2013, 16:09
Ответы с готовыми решениями:

Для чего служит первый параметр (HWND hWnd) в функции WndProc?
// функция обработки сообщений LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM...

Окно на WinAPI, параметр функции WndProc (HWND hWnd,.)
Пытаюсь понять какое значение хранит первый параметр HWND hWnd в функции WndProc. В Windows в...

Почему переменная HWND hwnd объявлена дважды?
Один раз в функции WinMain: int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,...

Найти HWND окна, зная HWND окна, породившего его
Здравствуйте! Имеется основное окно "А". Это окно создаёт новое недочернее окно "Б". Необходимо...

28
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
21.02.2013, 17:06 2
Цитата Сообщение от AndreyZelenchuk Посмотреть сообщение
но не совпадение форматов не дает это сделать
Каких форматов?
0
1 / 1 / 3
Регистрация: 21.02.2013
Сообщений: 40
21.02.2013, 17:07  [ТС] 3
hwnd тип не подходит для стандартных ф-ций записи в файл, в гугле искал - но увы не нашел ничего подходящего.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
21.02.2013, 17:14 4
Как Вы получаете "некий дескриптор"? Приведите пример кода.
0
1 / 1 / 3
Регистрация: 21.02.2013
Сообщений: 40
21.02.2013, 17:14  [ТС] 5
C++
1
ShellExecute(hwnd,TEXT("open"), TEXT("d:\\txt.txt"), NULL, NULL,SW_SHOWNORMAL);
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
21.02.2013, 17:17 6
Вы не ответили, как получаете hwnd. То, что я вижу - использование уже полученного.
0
1 / 1 / 3
Регистрация: 21.02.2013
Сообщений: 40
21.02.2013, 17:24  [ТС] 7
насколько я знаю, тут берется hwnd моего .тхт или я не прав?

Добавлено через 5 минут
C++
1
2
3
4
 wchar_t Buffer[20];
    swprintf( Buffer, L"%#p", hwnd );
    
    fputws(Buffer,file);
нашел реализацию, но проблема в следующем: почему то, вывод на консоль без проблем, но вывод в файл равен следующему: 000000000
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
21.02.2013, 17:38 8
Попробуйте убрать символ # из строки формата. Я думаю, дело в этом.
0
1 / 1 / 3
Регистрация: 21.02.2013
Сообщений: 40
21.02.2013, 17:42  [ТС] 9
результат тот же - 00000000
не знаю почему, пробовал разные варианты, не помагает
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
21.02.2013, 17:50 10
А как на консоль выводите?
0
1 / 1 / 3
Регистрация: 21.02.2013
Сообщений: 40
21.02.2013, 17:52  [ТС] 11
C++
1
2
swprintf( Buffer, L"%#p", hwnd );
cout<<Buffer;
вот так, все работает.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
21.02.2013, 17:58 12
Вот такой вариант работает:
C++
1
2
3
4
5
6
7
8
9
10
11
int _tmain(int argc, _TCHAR* argv[])
{
    int a = 42;
    int *hwnd = &a;
    wchar_t Buffer[20];
    swprintf( Buffer, L"%#p", hwnd );
    FILE* file = fopen( "test.out", "w" );
    fputws(Buffer,file);
    fclose( file );
    return 0;
}
Сравните с тем, что у Вас.
0
1 / 1 / 3
Регистрация: 21.02.2013
Сообщений: 40
21.02.2013, 18:02  [ТС] 13
где этот файл test.out ?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
21.02.2013, 18:13 14
Цитата Сообщение от AndreyZelenchuk Посмотреть сообщение
где этот файл test.out ?
Создается в рабочей папке программы. Скорее всего там же, где и исходники. Если не найти, можно добавить букву диска ("C:\\test.out") и файл будет создаваться в корне Ц.
0
1 / 1 / 3
Регистрация: 21.02.2013
Сообщений: 40
21.02.2013, 18:18  [ТС] 15
и как я должен это протестировать?
почему нельзя просто залить в мейн, без аргументов и всего лишнего, а нужно ускладнить задачу еще больше.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
21.02.2013, 18:26 16
Цитата Сообщение от AndreyZelenchuk Посмотреть сообщение
и как я должен это протестировать?
Создаете новый консольный проект, добавляете приведенный ранее код функции, компилируете, запускаете, смотрите результаты.
Цитата Сообщение от AndreyZelenchuk Посмотреть сообщение
почему нельзя просто залить в мейн, без аргументов и всего лишнего, а нужно ускладнить задачу еще больше.
Если не нравится
C++
1
int _tmain(int argc, _TCHAR* argv[])
- замените на
C++
1
int main()
или о чем Вы?
1
1 / 1 / 3
Регистрация: 21.02.2013
Сообщений: 40
21.02.2013, 18:35  [ТС] 17
ваш пример работает на ура!
вот мой почему, это уже хз
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
21.02.2013, 18:37 18
Приведите свой пример. Разберемся.
0
1 / 1 / 3
Регистрация: 21.02.2013
Сообщений: 40
21.02.2013, 18:40  [ТС] 19
вот весь код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <windows.h>
#include <iostream>
#include <conio.h>
#include <process.h>
#include <stdio.h>
#include <time.h>
 
using namespace std;
HWND hwnd;
int print(HWND hwnd);
 
unsigned __stdcall potok(void* Param)
{
        static int *p = (int*)Param;
        char buffer[150];
        wsprintf(buffer,"%u",*p);
        MessageBox(0,buffer,"Тест",0); 
        _endthreadex(0);
        return 0;
}
 
int print(HWND hwnd)
{
    errno_t err;
    FILE* file; 
    
    if((err = fopen_s(&file,"d:\\resultat.txt","w")) != 0)
    {
        cout << "file ne vidkrutuj" << "\n";
        
    }
    else
    {
        cout << "file vidkrutuj" << "\n";
    }
    const time_t timer = time(NULL);
    printf("%s\n", ctime(&timer));
 
    wchar_t Buffer[200];
    swprintf( Buffer, L"%ls------", hwnd );
    
    fputws(Buffer,file);
    fputs(ctime(&timer),file);
    fclose (file);
    return 0;
}
 
int main (void)
{
//------------------ПОТОКИ-------------------
    for(int i  = 0; i < 10; i++)
    {
        Sleep(5);//мс
        _beginthreadex (NULL,0,&potok, &i ,0, NULL);  // передаю змінну i в потік
    } 
    SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
    
    //GetThreadPriority
    DWORD priority;
    priority = GetThreadPriority( GetCurrentThread() );
    cout<<priority<<endl;
    
//--------------------------------------------
 
//ShellExecute
ShellExecute(hwnd,TEXT("open"), TEXT("d:\\txt.txt"), NULL, NULL,SW_SHOWNORMAL); 
 
int a = print(hwnd);
 
//CreateProcess
HANDLE hProc=NULL;
STARTUPINFO SProcess;
PROCESS_INFORMATION ProcInfo;
ZeroMemory( &SProcess, sizeof(SProcess) );
SProcess.cb = sizeof(SProcess);
ZeroMemory( &ProcInfo, sizeof(ProcInfo) );
CreateProcess( NULL,"\"c:\\windows\\system32\\calc.exe\"",  NULL,NULL,FALSE,0,NULL,NULL,&SProcess,&ProcInfo );
WaitForSingleObject( ProcInfo.hProcess, INFINITE );
CloseHandle( ProcInfo.hProcess );
CloseHandle( ProcInfo.hThread );
 
//OpenProcess
hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcInfo.dwProcessId);  
 
//GetCurrentProcessId
DWORD ID = GetCurrentProcessId(); //бере ід процеса проекта ехе віжуала, лаби
if(!ID)
{
cout<<"Could not get ID";
}
else
{
cout<<"ID: "<<ID<<"\n";
getch();
}
 
//SetPriorityClass
SetPriorityClass (hProc, HIGH_PRIORITY_CLASS);
 
//TerminateProcess
TerminateProcess(hProc,0);
 
//close Handle
CloseHandle(hProc);
 
//TerminateThread
TerminateThread(hProc,0);
 
return 0;
}
изначально мне нужно несколько операций с процессами и потоками, но их можно оставить и не трогать. Затем мне нужно описать ф-цию, которая бы выводила в .тхт файл каждый процес, его ид и некоторые свойства, об этом тоже можно забыть. Для начала хочу разобраться с дискриптором и записью его в файл.
0
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
21.02.2013, 18:41 20
А для чего в данном случае нужен # в спецификаторе формата?
0
21.02.2013, 18:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.02.2013, 18:41
Помогаю со студенческими работами здесь

HWND
Доброго времени суток, извините за такой тупой вопрос, но.... объявляю функцию void draw(HWND...

Найти HWND
Господа вопрос такой - делаю &quot;универсальную&quot; dll для внедрение в приложение , но вот проблема т.к....

HWND в double
Всем привет! Сразу скажу, что плохо в этом разбираюсь, поэтому не ругайтесь. У меня есть...

hwnd = 0x00000000
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru