Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Блокнот Добавлено: 22.07.05 11:04  

Автор вопроса:  Nord
Киньте пожалуйста ктонить код что бы когда блокнот открывался курсор стоял в такой то строке такойто позиции

Например чтоб при нажатии на кнопку открывался блокнот а курсор стоял в 25 строке между 6 и 7 символом

Заране пасиб

Ответить

  Ответы Всего ответов: 23  

Номер ответа: 1
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #1
Добавлено: 22.07.05 11:14
Через оконные сообщения.

Ответить

Номер ответа: 2
Автор ответа:
 Nord



Вопросов: 15
Ответов: 28
 Профиль | | #2 Добавлено: 22.07.05 11:16
Ни о чем не сказало! :(

Ответить

Номер ответа: 3
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #3
Добавлено: 22.07.05 11:33
Тебе нужно сначала найти хендл окна редактирования в блокноте, а затем послать ему сообщения о смене выделения (EM_...) с спомощью функции SendMessage.

Ответить

Номер ответа: 4
Автор ответа:
 Nord



Вопросов: 15
Ответов: 28
 Профиль | | #4 Добавлено: 22.07.05 11:35
Я не настолько крут :(((

Ответить

Номер ответа: 5
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #5
Добавлено: 22.07.05 11:48
Ну тогда ищи пример или жди когда другие помогут.
Как посылать сообщения окну редактирования можешь посмотреть здесь:
http://basicproduction.nm.ru/TxBxHlpr.rar

А искать хендл окна блокнота можно перебором всех окон или FindWindowEx. Привязаться можно к индентификатору процесса, возвращаемого функцией Shell.

Ответить

Номер ответа: 6
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #6
Добавлено: 22.07.05 11:51
Тогда возьми SDK/MSDN и по индексу и по порядку:

FindWindow
(FindWindowEx + параметр названия класса "EDIT";)/(EnumChildWindows + (GetClassName = "EDIT";))
SendMessage + WM_SETCURSOR

Ответить

Номер ответа: 7
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #7 Добавлено: 22.07.05 12:09
Да ладно, пусть лучше через SendKeys сделает, так доходчивее :)

Ответить

Номер ответа: 8
Автор ответа:
 Nord



Вопросов: 15
Ответов: 28
 Профиль | | #8 Добавлено: 22.07.05 12:18
Через SendKeys :) У мя в файле 4800 строк как это интересно будет выполнятся :)))

Ответить

Номер ответа: 9
Автор ответа:
 User Unknown



Вечный Юзер!

ICQ: uu@jabber.cz 

Вопросов: 120
Ответов: 3302
 Профиль | | #9 Добавлено: 22.07.05 12:24
Да лучше б свой написал с рич текст контролом... ей богу... а автоматизировать чего-то таким способом.. тем более блокнот - это крайне неблагодарно...

Ответить

Номер ответа: 10
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #10 Добавлено: 22.07.05 12:29
Ну как, как... PageDown, KeyDown, End :))))
Ты нашел с чем работать, блин. Блокнот :)

Ответить

Номер ответа: 11
Автор ответа:
 Nord



Вопросов: 15
Ответов: 28
 Профиль | | #11 Добавлено: 22.07.05 12:36
Блокнот самая рульная софтина!!!
Простая до безобразия :))

Ну млин скинте ктонить код!!!! :\ ПОЖАЛУЦТА

Ответить

Номер ответа: 12
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #12 Добавлено: 22.07.05 13:16
Ну, можешь че-то типа этого
код формы

Option Explicit

Private Sub Command1_Click()
Dim CharIndex As Long
Dim CharInLine As Long
Dim LineIndex As Long
LineIndex = 1000 'Номер нужной строки
CharInLine = 5 'Номер нужного символа
CharIndex = SendMessage(hWindow, EM_LINEINDEX, LineIndex, 0) 'Номер первого символа нужной строки
SendMessage hWindow, EM_LINESCROLL, 0, LineIndex 'Скролим текст на нужную строку
SendMessage hWindow, EM_SETSEL, CharIndex + CharInLine, CharIndex + CharInLine 'Устанавливаем курсор на нужную строку и символ
End Sub


Private Sub Form_Load()
Dim mWnd As Long
mWnd = FindWindow(vbNullString, "WIN32API - Notepad";)
EnumChildWindows mWnd, AddressOf EnumChildProc, ByVal 0&
End Sub


код модуля

Option Explicit
Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Const EM_LINESCROLL = &HB6
Public Const EM_LINEINDEX = &HBB
Public Const EM_SETSEL = &HB1
Public hWindow As Long

Public Function EnumChildProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
    Dim strClass As String
    strClass = Space$(255)
    GetClassName hwnd, strClass, 255
    If Left(strClass, 4) = "Edit" Then hWindow = hwnd
    EnumChildProc = 1
End Function

В моем примере был открыть NotePad с файлом WIN32API.TXT, начальное положение курсора - в начале файла.

Ответить

Номер ответа: 13
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #13 Добавлено: 22.07.05 13:20
Если нужно несколько раз позиционировать строку или позиционирование производится не сразу после открытия - то либо сначала ставь курсор в начало файла и делай скроллинг оттуда, либо получай текущую строку и делай поправку на нее.

Ответить

Номер ответа: 14
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #14 Добавлено: 22.07.05 13:34
Если непонятно - то слегка измени код
код формы

Dim FirstLine As Long
FirstLine = SendMessage(hWindow, EM_GETFIRSTVISIBLELINE, 0, 0)
'..........
SendMessage hWindow, EM_LINESCROLL, 0, LineIndex - FirstLine


код модуля

Public Const EM_GETFIRSTVISIBLELINE = &HCE

Всё. И желательно чтобы у тебя ничего не было до этого выделено.

Ответить

Номер ответа: 15
Автор ответа:
 Nord



Вопросов: 15
Ответов: 28
 Профиль | | #15 Добавлено: 22.07.05 16:10
Спасибо РАБОТАЕТ!!!

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам