Форум программистов, компьютерный форум, киберфорум
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.50/12: Рейтинг темы: голосов - 12, средняя оценка - 4.50
1126 / 260 / 9
Регистрация: 11.06.2010
Сообщений: 1,050
1

Framework & WinAPI. случаи "неподчинения"

18.07.2010, 14:11. Просмотров 2175. Ответов 23
Метки нет (Все метки)

Вобщем,суть темы: есть VB.NET(хотя тоже самое творится во всех продуктах .net старше версии 2.0)
есть Win7 или Vista.
есть программа,включающая в себя Api-функции.

итог выполнения этой программы: куча ошибок, т.к винда не отдаёт запрашиваемую инфу или же не записывает её в память.
Случай выполенения на WinXP завершается успешно,но вот как быть с семёркой и вистой?
вопрос: что не даёт программе норм использовать АПИ и как это исправить?
думаю,не у одного меня возникала(ет) такая проблема и кто-нибудь всяко,но знает решение.
Господа ЗНАЮЩИЕ и ЗНАКОМЫЕ с данной проблемой,плиз,отпишитесь
Всем ответившим огромное СПС))))
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.07.2010, 14:11
Ответы с готовыми решениями:

WinAPI кнопка "Пуск" в "Windows 7"
Подскажите, пожалуйста, как при помочи WinAPI, програмно нажать кнопку "Пуск" в "Windows 7"? ...

WinAPI "Static" + "GDI+"
Приветствую! Пишу для упрощения своей деятельности библиотечку (гуёвину). Столкнулся с проблемой:...

Игра "Реверси", переделать код с использованием WinAPI
Подскажите здесь используется WinApi или нет???? #include <stdio.h> #include <stdlib.h>...

WinAPI+HID: WriteFile генерирует код ошибки 1 ("Неверная функция")
Пишу обертку над собственным классом HID. Устройство нахожу, хендл к нему открывается, но при...

23
PB
18.07.2010, 14:37
  #2

Не по теме:

Смешивать управляемый код с неуправляемым.... :D

0
192 / 190 / 15
Регистрация: 27.01.2009
Сообщений: 548
18.07.2010, 16:02 3
-смотри что за апи функции используешь. потом ищи их в msdn. читай что для них требуется. там так и написано- минимум виндовс такойто. известно например, что GetPrivateProfileString( работа с ini файлами) уже при 98 виндовсе считалась отмирающей функцией( оставленной только для совместимости).
-по слухам в семерке( уже ненавижу этот виндовс, хотя и не видел) программа не может писать в каталог, где она и лежит. судя по словам, исходник у вас имеется. можете проверить сие мое утверждение.
-отладчик никто не отменял.
0
1126 / 260 / 9
Регистрация: 11.06.2010
Сообщений: 1,050
18.07.2010, 16:08  [ТС] 4
СПС.попробую
0
22 / 22 / 7
Регистрация: 30.01.2009
Сообщений: 103
19.07.2010, 18:02 5
скорей всего для этих функций нужны права администратора
0
1126 / 260 / 9
Регистрация: 11.06.2010
Сообщений: 1,050
21.07.2010, 11:53  [ТС] 6
Alex90,Умнее я ничё не читал Я АДМИНИСТРАТОР у меня права АДМИНИСТРАТОРА и программа запускается с пометкой ОТ ИМЕНИ АДМИНИСТРАТОРА. и про какие ты права говоришь?
0
22 / 22 / 7
Регистрация: 30.01.2009
Сообщений: 103
21.07.2010, 16:22 7
я не экстрасенс и о том что ты запускаешь программу ОТ ИМЕНИ АДМИНИСТРАТОРА не где не упоминалось. Так как на ХР большинство пользователей используют права админа изначально, а не семерке программа нужно дать добро для этих самих прав. Вот по этому я и предположил что программе не хватает полномочий
0
1126 / 260 / 9
Регистрация: 11.06.2010
Сообщений: 1,050
25.07.2010, 12:19  [ТС] 8
Извиняюсь,что так с ходу наехал((( просто если человек является программером,то я не думаю,что он может ступить и свою программу на полномочия урезать
0
CEO
Эксперт С++
2255 / 1245 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
25.07.2010, 22:50 9
Цитата Сообщение от sh2ezo Посмотреть сообщение
вопрос: что не даёт программе норм использовать АПИ и как это исправить?
Цитата Сообщение от radiohobbyt Посмотреть сообщение
смотри что за апи функции используешь.
так ответа и не последовало.

спокойно использую pinvoke в Seven - пока глюков никаких. Мож антивирь?
0
1126 / 260 / 9
Регистрация: 11.06.2010
Сообщений: 1,050
27.07.2010, 11:27  [ТС] 10
а опиши,плиз,характер системы(ver Win & antivir),а ещё номер framework'а.
прост надоело уже в урезанном режиме пользоваться((((
0
1126 / 260 / 9
Регистрация: 11.06.2010
Сообщений: 1,050
02.08.2010, 21:51  [ТС] 11
попробовал переписать в файле проекта назначение и определение прав
прога запускается в административном режиме с полным доступом к ФС,ВП(видео),ИНЕТ и т.д.
но ВинАПИ по-прежнему отказывается отдавать мне данные(например,позицию курсора)
0
3 / 3 / 0
Регистрация: 15.08.2010
Сообщений: 15
15.08.2010, 22:52 12
У меня была проблема не выполнения АПИ-функций. Но оказалось, что новые компиляторы типы long, например, понимают как 8-байтовые, а для АПИ оказалось, естественно, нужно их заменить на int.
0
1126 / 260 / 9
Регистрация: 11.06.2010
Сообщений: 1,050
16.08.2010, 12:29  [ТС] 13
эту идею я поробую))спасиб)) но ведь функция GetWindowText отдаёт не long, а string. точнее,не отдаёт,хотя весь инет обегал и понял,что это не в моих кривых руках дело. это нужно,так как координаты я могу узнать и,воспользовавшись стандартными функция фрэймворка,а вот тексты и классы фрэймворк мне из чужих окон точно не вытащит

Добавлено через 9 минут
сейчас посмотрел и увидел одну интересную вещь: в APIGen все long'и итак заменены на string'и,поэтому этот вариант в моём случае битый.
Кстати,вот ещё тут недавно обнаружил один факт: изменяющие функции(например:SetWindowText,setCursorPos,setClipboardData и т.п.) работают,как часы,а вот функции читающие(Get******** и всё,что с этим связано) не работают.Хотя,запустив NvidiaDesktopManager и попробовав определить через него класс окна,получил нужный результат. Из этого следует,что,реально,что-то уже сам framework мудит.

У кого есть варианты?
0
3 / 3 / 0
Регистрация: 15.08.2010
Сообщений: 15
16.08.2010, 14:05 14
Ну почему? Что касается функции GetWindowText все в Visual Studio 2008 работает.
Посмотрите пример.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Imports Microsoft.VisualBasic
Module Module1
    Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, _
                           ByVal lpWindowName As String) As Integer
    Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Integer, _
                           ByVal lpString As String, _
                           ByVal cch As Integer) As Integer
 
    Sub Main()
        Dim i As Integer
        '    i = FindWindow(vbNullString, "Microsoft Word")
        i = FindWindow(vbNullString, "Project1 (Выполнение) - Microsoft Visual Studio")
 
        MsgBox(i)
        Dim s As String
 
        Dim k As Integer
        s = New String(vbNullChar, 256)
        k = GetWindowText(i, s, 256)
        MsgBox(s)
    End Sub
End Module
Если оставить типы Long вместо Integer, то не работает. Ругается на выход за пределы. Числовые аргументы должны иметь 4 байта, а не 8.
1
1126 / 260 / 9
Регистрация: 11.06.2010
Сообщений: 1,050
17.08.2010, 22:01  [ТС] 15
Замену GetCursorPos я уже нашёл в самом фрэймворке,а насчёт остальных Get*********-подобных понял свою ошибку. У меня для String'а в определении задавался просто nothing без размера,поэтому он и не отдавал текст. СПС за пример))))))))

Добавлено через 30 минут
Ну,что же,текст я вытащил,имя класса тоже,на радостях попытался считать сообщение
vb.net
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
Public Class Form1
    Public Structure POINTAPI
        Dim x As Integer
        Dim y As Integer
    End Structure
    Public Structure MSG
        Dim hwnd As Integer
        Dim message As Integer
        Dim wParam As Integer
        Dim lParam As Integer
        Dim time As Integer
        Dim pt As POINTAPI
    End Structure
    Public Declare Function GetMessage Lib "user32" Alias "GetMessageA" (ByVal lpMsg As MSG, ByVal hwnd As Integer, ByVal wMsgFilterMin As Integer, ByVal wMsgFilterMax As Integer) As Integer
    Public Const WM_LBUTTONDBLCLK = &H203
    Public Declare Function WindowFromPoint Lib "user32" Alias "WindowFromPoint" (ByVal xPoint As Integer, ByVal yPoint As Integer) As Integer
    Public Const WM_KILLFOCUS = &H8
    Public Const WM_LBUTTONDOWN = &H201
    Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
        Dim prg As Integer
        prg = 1
        Do While prg = 1
            Dim m As New MSG
            Dim wHand As New Integer
            wHand = WindowFromPoint(Form.MousePosition.X, Form.MousePosition.Y)
            GetMessage(m, wHand, WM_KILLFOCUS, WM_LBUTTONDOWN)
            If m.message = WM_LBUTTONDBLCLK Then MsgBox("OK")
            Application.DoEvents()
        Loop
    End Sub
End Class
выдаёт: мол,ошибка при чтении или записи в защищённую память. Это опять я где-то невнимателен?
0
Почетный модератор
Эксперт .NET
8679 / 3631 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
17.08.2010, 22:10 16
Ну во первых WindowFromPoint возвращает IntPtr, т.е. HANDLE.
Во вторых WindowFromPoint объявлена не так. Скорее всего GetCursorPos тоже.
В третьих советую заглянуть на PInvoke и смотреть объявления на MSDN.

P.S. hWnd, lParam, wParam тоже должны быть IntPtr.
0
1126 / 260 / 9
Регистрация: 11.06.2010
Сообщений: 1,050
17.08.2010, 22:19  [ТС] 17
А кто написал,что WindowFromPoint не отдаёт хэндл? отдаёт))) а с IntPtr сща попробую

Добавлено через 4 минуты
ГГ Ответ от программы в моём переводе: жопа

intPtr и integer не отличаются по сути своей))
0
Почетный модератор
Эксперт .NET
8679 / 3631 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
17.08.2010, 22:48 18
Цитата Сообщение от sh2ezo Посмотреть сообщение
intPtr и integer не отличаются по сути своей
Посмотри в рефлекторе отличается int от IntPtr или нет. Очень советую.
Какие API не работают, список пожалуйста.

Добавлено через 16 минут
И какая цель программы. Если не top secret.
0
3 / 3 / 0
Регистрация: 15.08.2010
Сообщений: 15
17.08.2010, 23:43 19
Во-первых, функция WindowFromPoint имеет не 2 аргумента, а один. В качестве аргумента в нее передается структура POINT, которая состоит из двух значений.
Во-вторых, действительно непонятно что вы хотите чтобы эта программа делала? Если просто создать окно, то это делается намного проще. Посмотрите как это делает мастер при создании виндового проекта.
Но можно еще проще, можно создать окно вообще парой строк.
0
1126 / 260 / 9
Регистрация: 11.06.2010
Сообщений: 1,050
20.08.2010, 12:57  [ТС] 20
Ну, окно и я могу парой строк на чистом vb создать и отследить в нём действия без применения API. но это относится лишь к моим окнам,сделанных моим процессом,но фрэймворк,как бы его ни насиловал,не даст контроль над окнами чужих процессов. А мне нужен этот контроль хотя бы для того,чтобы отслеживать действия мыши в чужих окнах и,например,при двойном щелчке вытаскивать из окна(любой тип) текст и сливать его в буфер обмена,а то так иногда бесит переписывать тексты ошибок(это к примеру,а так большое применение можно найти). И,вот ещё,по поводу WindowFromPoint.
Она содержит два аргумента: xPoint & yPoint(screensave внизу).Не знаю,как у вас,а у меня именно такая структура работает))) И,вот ещё,integer & IntPtr у меня конвертируются отлично,не знаю,как у вас. Ну,так что,кто нибудь может сказать,в чём проблема,если на сей раз не в моих руках? И ещё,я посмотрел норм аргументы в MSDN для GetMessage и там значится указатель в памяти на структуру MSG мою. Так вот,я подумал,что,может именнго MSG не так объявлен и из-за этого API не может записать в него данные,так как сигмент в том месте почему-то лочится. Кто-нибудь может что-то типа моего отписать,но где обязательно используется GetMessage и MSG? нужно проверенный пример,а не сходу написанный
0
Миниатюры
Framework & WinAPI. случаи "неподчинения"  
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.08.2010, 12:57

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Курсовой проект Игра "Жизнь" на WinAPI
Итак, уважаемые форумчане, всем привет. Нужно создать курсовой проект по WinAPI по дисциплине...

Написать игру "Морской бой" на WinAPI
Помогите пожалуйста написать игру Морской бой в Win Api. Есть игра в консольном приложении. На...

WINAPI. Меню. Ошибка: "fatal error RC1004: unexpected end of file found"
Не понимаю в чём причина. Меню: #include "resource.h" myMenu MENU { POPUP "File" ...

Стал изучать WinAPI по Петцольду и сразу "неразрешенный внешний символ ." подскажите где ошибки пж
Стал я изучать DirectX по Луне и там были ошибки типа неразрешенный внешний символ и бла бла...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.