Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема при работе с окнами через windows API 
:(
    Опции темы
V0fka
Дата 2.7.2013, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 5.11.2006
Где: Украина

Репутация: нет
Всего: нет



Привет!

Использую C#, ось Windows 7.

Хочу активировать окно приложения. Для этого добавил вызов ряда функций, среди которых есть такая:

Код

[DllImport("coredll.dll", EntryPoint = "CreateMutex", SetLastError = true)]
public static extern IntPtr CreateMutex(IntPtr lpMutexAttributes, bool InitialOwner, string MutexName);


Но при попытке вызова получаю ошибку, в которой говорится:
Цитата
System.DllNotFoundException: Не удается загрузить DLL "coredll.dll": Не найден указанный модуль. (Исключение из HRESULT: 0x8007007E)


Пробовал вместо coredll.dll указать core.dll (пальцем в небо), но результат тот же. Пробовал искать в системе указанную библиотеку - не находит.

Подскажите, пожалуйста, как решить проблему.
PM MAIL   Вверх
diadiavova
Дата 2.7.2013, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Правильно имя библиотеки указать видимо надо. Например kernel32.dll


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
dzaraev
Дата 2.7.2013, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 12.1.2013

Репутация: 1
Всего: 1



Цитата(V0fka @  2.7.2013,  10:17 Найти цитируемый пост)
Пробовал искать в системе указанную библиотеку - не находит.

Если вы не можете найти, почему CLR должен смочь? )) Система у вас с CLR одна на двоих. Нужно разобраться с примером, из которого вы взяли код - что это за библиотека и откуда она. Может быть ваш пример был предназначен под Windows CE например и т.д.
Скорее всего diadiavova прав, но лучше вам разобраться, а не тыкать пальцем в небо.
--------------------
Если вопрос решён - помечайте тему.  
PM MAIL   Вверх
V0fka
Дата 2.7.2013, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 5.11.2006
Где: Украина

Репутация: нет
Всего: нет



Цитата(diadiavova @  2.7.2013,  10:29 Найти цитируемый пост)
Правильно имя библиотеки указать видимо надо. Например kernel32.dll

Да, спасибо! smile

Цитата(dzaraev @  2.7.2013,  10:43 Найти цитируемый пост)
Если вы не можете найти, почему CLR должен смочь? )) Система у вас с CLR одна на двоих. Нужно разобраться с примером, из которого вы взяли код - что это за библиотека и откуда она. Может быть ваш пример был предназначен под Windows CE например и т.д.Скорее всего diadiavova прав, но лучше вам разобраться, а не тыкать пальцем в небо.

Я догадался, что нет нужной мне библиотеки (той, которая была в примере кода). И я поэтому специально написал, что использую Windows 7, т.к. подумал, что может быть пример кода отличается поведением в разных ОС. В общем, ДядяВова прав, надо было другую длл указать. Спасибо за ответ! smile

У меня теперь появилась другая проблема smile . Окно нахожу, открываю

Код
SetWindowPos(h, 0, 0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, 0x0040);


но оно открывается только, если не свернуто. Т.е. если окно находится за другим - отрабатывает как положено. А если нажать на кнопку "свернуть", то оно просто активируется (подсвечивается) в панеле задач. Как мне его развернуть?
PM MAIL   Вверх
diadiavova
Дата 3.7.2013, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Цитата(V0fka @  2.7.2013,  16:12 Найти цитируемый пост)
Как мне его развернуть? 

Видимо как-то так
http://pinvoke.net/default.aspx/user32.ShowWindow
Хотя, если речь об окне твоего же приложения, то винапи тут вообще ни при чем, можно с формами работать непосредственно, а для окон других приложений можно использовать UIAutomation. В уиаутомэйшн разбираться, конечно, придется, но насколько я понимаю, в винапи ты тоже отнюдь не как рыба в воде, так что ничего не потеряешь.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
V0fka
Дата 4.7.2013, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 5.11.2006
Где: Украина

Репутация: нет
Всего: нет



diadiavova, ну, что я могу сказать... Ты как всегда smile ! Спасибо!

"Окно приложения" - это не форма моего приложения, а окно какого-то запущенного "левого" приложения. С помощью UIAutomation получилось достичь эффекта, который я достиг до создания этой темы (могу активировать окно, если оно не свернуто). Если можно как-то развернуть окно - сообщите, пожалуйста (академический интерес smile ). А через WinAPI получилось развернуть smile .

Это сообщение отредактировал(а) V0fka - 4.7.2013, 17:30
PM MAIL   Вверх
diadiavova
Дата 6.7.2013, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Цитата(V0fka @  4.7.2013,  18:29 Найти цитируемый пост)
Если можно как-то развернуть окно - сообщите, пожалуйста (академический интерес smile ).

Ну что-то типа такого. Этот код разворачивает окно блокнота(первое, которое найдет), в данном случае во весь экран, но можно установить Normal
Код

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Automation;
using System.Linq;

namespace automationmaximazewindow
{
    class Program
    {
        static void Main(string[] args)
        {
            var notepad = (from AutomationElement win in FindWindows() where win.Current.Name.Contains("Блокнот") select win).FirstOrDefault();
            (notepad.GetCurrentPattern(WindowPattern.Pattern) as WindowPattern).SetWindowVisualState(WindowVisualState.Maximized);
            Console.ReadKey();
        }


        static AutomationElementCollection FindWindows()
        {
            return AutomationElement.RootElement.FindAll(TreeScope.Children,new PropertyCondition(AutomationElement.ControlTypeProperty,System.Windows.Automation.ControlType.Window));
        }
    }
}




--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
V0fka
Дата 8.7.2013, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 5.11.2006
Где: Украина

Репутация: нет
Всего: нет



diadiavova, спасибо! smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0503 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.